package com.zeng.ssm.api.support.idempotent;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 幂等性注解
 * <p>
 * 通过业务参数过滤是否为重复请求
 * <p>
 *
 * @author lenovo
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamIdempotent {

    /**
     * 幂等性缓存（锁）前缀
     */
    String prefix() default "idempotent:";

    /**
     * 要从参数中排除的属性集合
     *
     * @return
     */
    String[] excludeAttributes() default {};

    /**
     * 检查时间（Redis/Memcached锁超时时间）（s）
     * <p>
     * 平均业务处理时间 * 5
     *
     * @return
     */
    long interval() default 60;

}
